package com.software.comment.mapper;
import com.software.comment.pojo.Comment;
import org.apache.ibatis.annotations.*;


import java.util.List;

/**
 * @author lj20050120
 */
@Mapper
public interface CommentMapper {

    /**
     * 添加评论
     *
     * @param comment 评论对象
     * @return 添加结果
     */
    @Insert("INSERT INTO comment (task_id,username,create_time,reply_username,content,level,parent_comment_id,comment_pic,reply_parent_comment_id) VALUES (#{taskId},#{username},#{createTime},#{replyUsername},#{content},#{level},#{parentCommentId},#{commentPic},#{replyParentCommentId})")
    boolean addComment(Comment comment);

    /**
     * 根据任务 ID 查询用户名
     * @param id 评论 ID
     * @return 用户名
     */
    @Select("select `username` from comment where `id`=#{id} ")
    String findCommentsReplyById(Integer id);

    /**
     * 根据任务 ID 查询评论列表
     * @param taskId 任务 ID
     * @return 评论列表
     */
    @Select("select `id`,`username`,level,parent_comment_id,`content`,create_time,comment_pic from comment where task_id = #{taskId} and level = 1 order by create_time")
    List<Comment> findCommentsByTaskId(Long taskId);

    /**
     * 删除对应评论
     *
     * @param id 父评论 ID
     */
    @Delete("delete from comment where id = #{id}")
    void deleteCommentByParentId(Long id);


    /**
     * 根据任务 ID 和父评论 ID 查询回复评论列表
     * @param taskId 任务 ID
     * @param parentCommentId 父评论 ID
     * @return 回复评论列表
     */
    @Select("SELECT id,username,task_id,create_time,reply_username,content,level,parent_comment_id,top,comment_pic,reply_parent_comment_id,reply_parent_comment_id FROM comment WHERE task_id = #{taskId} AND (parent_comment_id = #{parentCommentId}) ORDER BY create_time")
    List<Comment> findCommentsByTaskIdAndParentId(@Param("taskId") Long taskId, @Param("parentCommentId") Long parentCommentId);

    /**
     * 根据评论 ID 查询和处于一级评论层级的评论是否置顶
     * @param commentId 评论 ID
     * @return 评论是否置顶
     */
    @Select("select top from comment where id = #{commentId} and level = 1")
    Integer findIsTopComment(Long commentId);


    /**
     * 更新评论置顶状态
     * @param commentId 评论 ID
     * @param isTopComment 置顶状态（1：置顶，0：取消置顶）
     */
    @Update("update comment set top = #{isTopComment} where id = #{commentId}")
    void updateIsTopCommentInDataBase(Long commentId, Integer isTopComment);
    /**
     * 根据评论的整数类型 ID 获取单条评论信息，并按照创建时间排序（新增排序逻辑）
     * @param id 评论 ID
     * @return 评论信息
     */
    @Select("SELECT id,username,task_id,create_time,reply_username,content,level,parent_comment_id," +
                "top,comment_pic,reply_parent_comment_id,reply_parent_comment_id " +
            "FROM comment WHERE id = #{id} ORDER BY create_time ")
    Comment getCommentById(Integer id);

    /**
     * 根据回复父评论的整数类型 ID 获取对应的父评论信息（往上查找），按照创建时间排序
     * @param replyParentCommentId 被回复的父评论 ID
     * @return 父评论信息
     */
    @Select("SELECT id,username,task_id,create_time,reply_username,content,level,parent_comment_id," +
                "top,comment_pic,reply_parent_comment_id,reply_parent_comment_id " +
            "FROM comment WHERE id = #{replyParentCommentId}")
    Comment getParentCommentByReplyParentCommentId(Integer replyParentCommentId);

    /**
     * 根据评论的整数类型 ID 获取其下一级回复评论，按照创建时间排序
     * @param commentId 评论 ID
     * @return 子评论信息
     */
    @Select("SELECT id,username,task_id,create_time,reply_username,content,level,parent_comment_id," +
                "top,comment_pic,reply_parent_comment_id,reply_parent_comment_id " +
            "FROM comment WHERE reply_parent_comment_id = #{commentId} ")
    List<Comment> getChildCommentsByCommentId(Integer commentId);
}